package com.nari.ncps.screen;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class CodeGenerator {
    public static void main(String[] args) {
//        String url = "jdbc:mysql://192.168.1.10:3306/whole_product?useSSL=false&serverTimezone=UTC";

//        String url = "jdbc:mysql://62.234.0.42:3306/pad_db?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone" +
//                "=UTC&serverTimezone=Asia/Shanghai&characterEncoding=utf8";

        String url = "jdbc:opengauss://10.237.2.53:15400/testdb?currentSchema=my_screen1";
        String username = "testuser";
        String password = "ndty@1234";


//        String username = "root";
////        String password = "root";
//        String password = "Work123_";
        String outputDir = System.getProperty("user.dir") + "/src/main/java";
//        String basePackage = "com.screen.screendisplay";  // 你的项目包名
        String basePackage = "com.nari.ncps.screen";  // 你的项目包名


        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    builder.author("wanghuiqiang")      // 作者名
                            .outputDir(outputDir)       // 输出路径
                            .disableOpenDir()           // 生成后不打开文件夹
                            .commentDate("yyyy-MM-dd"); // 注释日期格式
                })
                .packageConfig(builder -> {
                    builder.parent(basePackage)     // 父包名
//                            .moduleName("system")       // 模块名（可选）
                            .pathInfo(Collections.singletonMap(
                                    OutputFile.xml,
                                    System.getProperty("user.dir") + "/src/main/resources/mapper"  // XML 文件路径
                            ));
                })

//                // 模板配置要在 strategyConfig 之前  ,配置swagger3注解的方法
//                .templateConfig(builder -> {
//                    builder.entity("/templates/entity"); // 使用自定义实体类模板
//                })

                .strategyConfig(builder -> {
//                    builder.addInclude("pad_product_info", "pad_subproduct_info")  // 要生成的表名
                    builder.addInclude("qt_dp_al_prodoper_prd_sit_ly","qt_dp_al_prodoper_prd_sit_ld","qt_dp_al_prodoper_prd_sit_tsyj")  // 要生成的表名
                            .addTablePrefix("qt_dp_")          // 表前缀过滤
                            .entityBuilder()               // 实体类配置
                            .enableLombok()           // 启用 Lombok

                            .enableFileOverride()  // 启用文件覆盖，如果文件已存在会覆盖
                            .enableChainModel() // 链式模型


                            .enableTableFieldAnnotation() // 字段注解
                            .controllerBuilder()           // Controller 配置
                            .enableRestStyle()         // 生成 @RestController
                            .mapperBuilder()
                            .enableMapperAnnotation()  // 生成 @Mapper
                            .serviceBuilder()
                            .formatServiceFileName("%sService"); // Service 接口命名规则
                })

//                //生成注解swagger3用
//                .injectionConfig(builder -> {
//                    // 注入自定义配置，确保 swagger 变量在模板中可用
//                    Map<String, Object> customMap = new HashMap<>();
//                    customMap.put("swagger", true);
//                    builder.customMap(customMap);
//                })

                .templateEngine(new FreemarkerTemplateEngine()) // 使用 Freemarker
                .execute();
        System.out.println("生成成功");
    }
}
